/**    
 * 文件名：MultDataSource.java    
 *    
 * 版本信息：    
 * 日期：2013-4-10    
 * Copyright 足下 Corporation 2013     
 * 版权所有    
 *    
 */
package com.jerry.dataSource;

import java.io.PrintWriter;
import java.io.ObjectInputStream.GetField;
import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.apache.log4j.Logger;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**    
 *     
 * 项目名称：SpringMVC    
 * 类名称：MultDataSource    
 * 类描述：    封装基本数据类实现多数据封装
 * 创建人：Administrator    
 * 创建时间：2013-4-10 下午8:42:47    
 * 修改人：Administrator    
 * 修改时间：2013-4-10 下午8:42:47    
 * 修改备注：    
 * @version     
 *     
 */
public class MultDataSource implements DataSource,ApplicationContextAware {
	
	static Logger logger = Logger.getLogger(MultDataSource.class);
	
	/**默认数据源**/
	private DataSource dataSource = null;
	/***spring上下文对象**/
	private ApplicationContext applicationContext = null;
	
	public DataSource getDataSource() {
		return getDataSource(Sp0bserver.getSp());
	}
	
	@Override
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
		this.applicationContext = applicationContext;		
	}

	/***
	 * 
	   
	 * getDataSource(这里用一句话描述这个方法的作用)    
	   
	 * TODO(这里描述这个方法适用条件 – 可选)    
	   
	 * TODO(这里描述这个方法的执行流程 – 可选)    
	   
	 * TODO(这里描述这个方法的使用方法 – 可选)    
	   
	 * TODO(这里描述这个方法的注意事项 – 可选)    
	   
	 * @param   name    
	   
	 * @param  @return    设定文件    
	   
	 * @return String    DOM对象    
	   
	 * @Exception 异常对象    
	   
	 * @since  CodingExample　Ver(编码范例查看) 1.1
	 */
	public DataSource getDataSource(String dataSourceName) {
		logger.debug("dataSourceName:["+dataSourceName+"]");
		if(null == dataSourceName||dataSourceName.equals("")){
			return dataSource;
		}
		return (DataSource) this.applicationContext.getBean(dataSourceName);
	}
	
	public void setDataSource(DataSource dataSource) {
		this.dataSource = dataSource;
	}

	@Override
	public PrintWriter getLogWriter() throws SQLException {
		// TODO Auto-generated method stub
		return getDataSource().getLogWriter();
	}

	@Override
	public void setLogWriter(PrintWriter out) throws SQLException {
		getDataSource().setLogWriter(out);
	}

	@Override
	public void setLoginTimeout(int seconds) throws SQLException {
		getDataSource().setLoginTimeout(seconds);
	}

	@Override
	public int getLoginTimeout() throws SQLException {
		return getDataSource().getLoginTimeout();
	}

	@Override
	public <T> T unwrap(Class<T> iface) throws SQLException {
		return getDataSource().unwrap(iface);
	}

	@Override
	public boolean isWrapperFor(Class<?> iface) throws SQLException {
		return getDataSource().isWrapperFor(iface);
	}

	@Override
	public Connection getConnection() throws SQLException {
		return getDataSource().getConnection();
	}

	@Override
	public Connection getConnection(String username, String password)
			throws SQLException {
		return getDataSource().getConnection(username, password);
	}

	
}
